iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0
Mobile Development

用Spring Boot架設後端結合Android前端建構智慧個人化推薦系統系列 第 21

Day21 Spring Security 使用OAuth2進行社交媒體登入:如何整合第三方登入方式

  • 分享至 

  • xImage
  •  

在當今的應用程式開發中,使用社交媒體帳號進行登入已成為一種趨勢。透過社交媒體登入,不僅可以提高使用者的登入便利性,還能簡化註冊流程。這篇文章將指導你如何使用 Spring Security 與 OAuth2 整合第三方登入方式,例如 Google 或 Facebook

首先添加以下依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Google OAuth2 設定

首先,前往 Google Cloud Console 來創建一個 OAuth 2.0 憑證。

  1. 創建一個新的專案。
  2. 尋找「API 和服務 > 憑證」。
  3. 點擊「創建憑證」,選擇「OAuth 2.0 客戶端 ID」。
  4. 設置授權的重定向 URI,例如 http://localhost:8080/login/oauth2/code/google
  5. 記下你的客戶端 ID 和客戶端密鑰。

Facebook OAuth2 設定

前往 Facebook Developers 設定 Facebook 登入:

  1. 創建一個應用。
  2. 進入「設定 > 基本」,填寫應用詳細信息。
  3. 在「產品 > Facebook 登入」中,添加一個平台,設置為「網站」,並提供你的網站網址。
  4. 設置有效的 OAuth 重定向 URI,例如 http://localhost:8080/login/oauth2/code/facebook
  5. 記下你的 App ID 和 App Secret

在你的 src/main/resources/application.yml 檔案中,添加以下配置

spring:
  security:
    oauth2:
      client:
        registration:
          google:
            client-id: YOUR_GOOGLE_CLIENT_ID
            client-secret: YOUR_GOOGLE_CLIENT_SECRET
            scope: profile, email
          facebook:
            client-id: YOUR_FACEBOOK_APP_ID
            client-secret: YOUR_FACEBOOK_APP_SECRET
            scope: public_profile, email
        provider:
          google:
            authorization-uri: https://accounts.google.com/o/oauth2/auth
            token-uri: https://oauth2.googleapis.com/token
            user-info-uri: https://www.googleapis.com/oauth2/v3/userinfo
            user-name-attribute: sub
          facebook:
            authorization-uri: https://www.facebook.com/v10.0/dialog/oauth
            token-uri: https://graph.facebook.com/v10.0/oauth/access_token
            user-info-uri: https://graph.facebook.com/me?fields=id,name,email
            user-name-attribute: id
            ```
            
確保你將 YOUR_GOOGLE_CLIENT_ID、YOUR_GOOGLE_CLIENT_SECRET、YOUR_FACEBOOK_APP_ID 和 YOUR_FACEBOOK_APP_SECRET 替換為你在之前步驟中獲取的憑證

接下來,建立一個安全配置類別來配置 Spring Security

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
            .antMatchers("/", "/login", "/webjars/**").permitAll()
            .anyRequest().authenticated()
            .and()
        .oauth2Login();
}

}

在這個配置中,我們允許公共路徑 /、/login 和 /webjars/** 被所有人訪問,而其他的路徑則需要身份驗證

為了顯示首頁和登入的功能,我們需要建立一個簡單的 Controller

@Controller
public class HomeController {

@GetMapping("/")
public String home() {
    return "home"; // 需建立 home.html
}

@GetMapping("/login")
public String login() {
    return "login"; // 需建立 login.html
}

}


在 src/main/resources/templates 目錄下,創建 home.html 和 login.html 文件
home.html

在這篇文章中,我們學會了如何使用 Spring Security 與 OAuth2 整合第三方登入方式。透過簡單的配置,我們可以讓使用者輕鬆地使用他們的社交媒體帳戶登入應用程式


上一篇
Day20 Spring Security 保護你的RESTful API:各種安全性措施的實作
下一篇
Day22 Spring Security的跨站請求偽造(CSRF)防護:為什麼這麼重要?
系列文
用Spring Boot架設後端結合Android前端建構智慧個人化推薦系統30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言